{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "387039b5",
   "metadata": {},
   "source": [
    "Here is a demo code for showing the extraction of molecular docking data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "8ae42cbb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# import nacessary libraries\n",
    "from rdkit import Chem\n",
    "import os\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "147435dd",
   "metadata": {},
   "source": [
    "# 1. load data from pdb files"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "ef164599",
   "metadata": {},
   "outputs": [],
   "source": [
    "ligand = Chem.MolFromPDBFile(\"../data/8skh/8skh_ligand.pdb\", sanitize=True, removeHs=False)\n",
    "receptor = Chem.MolFromPDBFile(\"../data/8skh/8skh_protein.pdb\", sanitize=True, removeHs=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b1dbe84d",
   "metadata": {},
   "source": [
    "# 2. select pharmacophore features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "d5455bb2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ligand's pharmacophore 3 points\n",
      "receptor's pharmacophore 3 points\n"
     ]
    }
   ],
   "source": [
    "from utils.molecular_featrue_porcess import get_4_feats, select_point\n",
    "\n",
    "feature_dict = {}\n",
    "feature_dict['ligand'] = get_4_feats(ligand)\n",
    "feature_dict['receptor'] = get_4_feats(receptor)\n",
    "\n",
    "# use the euclidean distance to select the points\n",
    "feature_dict['ligand'], feature_dict['receptor'] = select_point(feature_dict['ligand'], \n",
    "                                                              feature_dict['receptor'], \n",
    "                                                              distance=3)\n",
    "\n",
    "\n",
    "print(f\"ligand's pharmacophore {len(feature_dict['ligand'])} points\")\n",
    "print(f\"receptor's pharmacophore {len(feature_dict['receptor'])} points\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c49b9b56",
   "metadata": {},
   "source": [
    "# 3.construct Binding Interaction Graph (BIG)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "58db2710",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------\n",
      "Pharmacophore Features and their abbreviations: \n",
      "hydrogen-bond donor/acceptor -> HD(D_*)/HA(A_*),\n",
      "hydrophobe -> HP(H_*),\n",
      "aromatic ring -> AR(A_*).\n",
      "--------------------------------\n",
      "ligand's pharmacophore features:  ['D1', 'A1', 'H1']\n",
      "receptor's pharmacophore features:  ['d1', 'd2', 'h1']\n"
     ]
    }
   ],
   "source": [
    "# First we need to get the abbreviations and the distance matrix \n",
    "# of pharmacophore features of ligand and receptor\n",
    "\n",
    "from utils.matrix_process import make_dis_matrix, make_Abbrev_list\n",
    "\n",
    "processed_l_dis_matrix, l_pharmacophore_list = make_dis_matrix(feature_dict['ligand'])\n",
    "processed_r_dis_matrix, r_pharmacophore_list = make_dis_matrix(feature_dict['receptor'])\n",
    "\n",
    "l_pharmacophore_Abbrev_list = make_Abbrev_list(l_pharmacophore_list, moltype=\"ligand\")\n",
    "r_pharmacophore_Abbrev_list = make_Abbrev_list(r_pharmacophore_list, moltype=\"receptor\")\n",
    "\n",
    "# here we can see what kind of pharmacophore features we have\n",
    "print(\"--------------------------------\")\n",
    "print(\"Pharmacophore Features and their abbreviations: \")\n",
    "print(\"hydrogen-bond donor/acceptor -> HD(D_*)/HA(A_*),\\nhydrophobe -> HP(H_*),\\naromatic ring -> AR(A_*).\")\n",
    "print(\"--------------------------------\")\n",
    "print(\"ligand's pharmacophore features: \", l_pharmacophore_Abbrev_list)\n",
    "print(\"receptor's pharmacophore features: \", r_pharmacophore_Abbrev_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "id": "d6b8ef58",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Second we need to construct the Labeled Distance Graph (LDG) graph\n",
    "from utils.matrix_process import calculate_LDG_vertex_pair_distance\n",
    "import networkx as nx\n",
    "\n",
    "ligand_LDG_vertex_pair_distance = calculate_LDG_vertex_pair_distance(l_pharmacophore_Abbrev_list, processed_l_dis_matrix)\n",
    "receptor_LDG_vertex_pair_distance = calculate_LDG_vertex_pair_distance(r_pharmacophore_Abbrev_list, processed_r_dis_matrix)\n",
    "\n",
    "receptor_LDG_graph = nx.Graph()\n",
    "for v, e in receptor_LDG_vertex_pair_distance.items():\n",
    "    receptor_LDG_graph.add_nodes_from(v)\n",
    "    receptor_LDG_graph.add_edge(v[0],v[1], weight=e)\n",
    "\n",
    "ligand_LDG_graph = nx.Graph()\n",
    "for v, e in ligand_LDG_vertex_pair_distance.items():\n",
    "    ligand_LDG_graph.add_nodes_from(v)\n",
    "    if e:\n",
    "        ligand_LDG_graph.add_edge(v[0],v[1], weight=e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "0e6e81de",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the BIG has 4 vertices\n"
     ]
    }
   ],
   "source": [
    "# Third we need to construct the Binding Interaction Graph (BIG) graph\n",
    "from utils.matrix_process import check_pair_vaild, find_letter, check_edge\n",
    "import itertools\n",
    "import random\n",
    "import pickle\n",
    "\n",
    "BIG_v = []\n",
    "\n",
    "for vl, _ in ligand_LDG_vertex_pair_distance.items():\n",
    "    for vp, _ in receptor_LDG_vertex_pair_distance.items():\n",
    "        # if check_pair_match_with_interation_type(ligand_pair_distance=dl, protein_pair_distance=dp, lig_v_pair=vl):\n",
    "        fixed_ligand_with_p = []\n",
    "            # print(list(combinations(vl+vp, 2)))\n",
    "        for pair in list(itertools.combinations(vl+vp, 2)):\n",
    "            if check_pair_vaild(pair):\n",
    "                fixed_ligand_with_p.append(pair)\n",
    "        if fixed_ligand_with_p:\n",
    "            BIG_v.append(fixed_ligand_with_p)\n",
    "\n",
    "BIG_v = sorted(list(set(list(itertools.chain.from_iterable(BIG_v)))))   # upper case is label of ligand vertices, lower case is label of protein vertices\n",
    "# random.shuffle(BIG_v)\n",
    "n = len(BIG_v)\n",
    "valid_ligand_v = sorted(list(set(pair[0] for pair in BIG_v)))\n",
    "valid_protein_v = sorted(list(set(pair[1] for pair in BIG_v)))\n",
    "\n",
    "# then we need to load the potential interaction value for each pair of pharmacophore features\n",
    "pkl_file = open('./utils/contact_potential_function.pkl', 'rb')\n",
    "contact_potential = pickle.load(pkl_file)\n",
    "\n",
    "n_l = len(valid_ligand_v)\n",
    "n_p = len(valid_protein_v)\n",
    "\n",
    "BIG_vertex_weight_matrix = np.zeros((n_l, n_p))\n",
    "\n",
    "for i in range(n_l):\n",
    "    for j in range(n_p):\n",
    "        temp_BIG_v = (valid_ligand_v[i], valid_protein_v[j])\n",
    "        if temp_BIG_v in BIG_v:\n",
    "            BIG_vertex_weight_matrix[i][j] = contact_potential[find_letter(temp_BIG_v[0]).upper(), find_letter(temp_BIG_v[1]).upper()] # weight of BIG vertex\n",
    "\n",
    "print(f\"the BIG has {len(BIG_v)} vertices\")\n",
    "\n",
    "BIG_adjacent_matrix = np.zeros((n_l*n_p, n_l*n_p))\n",
    "BIG_adjacent_weight_matrix = np.zeros((n_l*n_p, n_l*n_p))\n",
    "\n",
    "for i in range(n_l*n_p):\n",
    "    for j in range(n_l*n_p):\n",
    "        if i == j:\n",
    "            BIG_adjacent_matrix[i, j] = 0\n",
    "        else:\n",
    "            BIG_adjacent_weight_matrix[i, j], BIG_adjacent_matrix[i, j] = check_edge(BIG_v[i], BIG_v[j], ligand_LDG_vertex_pair_distance, receptor_LDG_vertex_pair_distance)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "1b228001",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'A1_d1': Text(0.9999999999834855, 0.2586212433220087, 'A1_d1'),\n",
       " 'A1_d2': Text(0.4038546775304736, -0.9509057772444159, 'A1_d2'),\n",
       " 'H1_d1': Text(-0.9999999999999999, -0.25862124335331976, 'H1_d1'),\n",
       " 'H1_d2': Text(-0.40385467751395954, 0.9509057772757286, 'H1_d2')}"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 850x850 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw the BIG\n",
    "BIG_graph = nx.Graph()\n",
    "v_name = [f'{valid_ligand_v[i]}_{valid_protein_v[j]}' for i in range(n_l) for j in range(n_p)]\n",
    "for i, v in enumerate(v_name):\n",
    "    BIG_graph.add_node(v, weight=BIG_vertex_weight_matrix.flatten()[i])\n",
    "\n",
    "for i in range(len(BIG_adjacent_weight_matrix)):\n",
    "    for j in range(i, len(BIG_adjacent_weight_matrix[i])):\n",
    "        if BIG_adjacent_matrix[i][j]:\n",
    "            BIG_graph.add_edge(v_name[i], v_name[j], weight=round(BIG_adjacent_weight_matrix[i][j], 2))\n",
    "\n",
    "pos = nx.spring_layout(BIG_graph)\n",
    "edge_labels = nx.get_edge_attributes(BIG_graph, 'weight')  # 获取边的权重作为标签\n",
    "\n",
    "plt.figure(figsize=(8.5, 8.5))\n",
    "plt.title(\"\")\n",
    "# Draw the BIG graph showing vertex weights as node labels, and hide edge weights.\n",
    "# Usage: Visualizes the BIG graph with node labels indicating vertex weights.\n",
    "# Input: BIG_graph (networkx.Graph), pos (dict of node positions)\n",
    "# Output: Matplotlib plot with node weights as labels\n",
    "\n",
    "# Prepare node labels as vertex weights (rounded for clarity)\n",
    "node_labels = {v: f\"{BIG_graph.nodes[v]['weight']:.2f}\" for v in BIG_graph.nodes}\n",
    "\n",
    "nx.draw_networkx_nodes(BIG_graph, pos, node_color='lightblue', node_size=1000)\n",
    "nx.draw_networkx_edges(BIG_graph, pos)\n",
    "nx.draw_networkx_labels(BIG_graph, pos, font_color='black')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1811307f",
   "metadata": {},
   "source": [
    "# 4. get the final data we need"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "4500eddc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vertex: A1_d1, Weight: 0.6686, Connected to: ['A1_d2', 'H1_d1', 'H1_d2']\n",
      "Vertex: A1_d2, Weight: 0.6686, Connected to: ['A1_d1', 'H1_d1', 'H1_d2']\n",
      "Vertex: H1_d1, Weight: 0.1453, Connected to: ['A1_d1', 'A1_d2', 'H1_d2']\n",
      "Vertex: H1_d2, Weight: 0.1453, Connected to: ['A1_d1', 'A1_d2', 'H1_d1']\n"
     ]
    }
   ],
   "source": [
    "# Print the data directly from the BIG graph: for each node, show its weight and its connected nodes.\n",
    "for v in BIG_graph.nodes:\n",
    "    weight = BIG_graph.nodes[v].get('weight', 'N/A')\n",
    "    connections = list(BIG_graph.neighbors(v))\n",
    "    print(f\"Vertex: {v}, Weight: {weight}, Connected to: {connections}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "02eb9b84",
   "metadata": {},
   "outputs": [],
   "source": [
    "for i, v in enumerate(v_name):\n",
    "    BIG_graph.add_node(v, weight=BIG_vertex_weight_matrix.flatten()[i])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "84c62485",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the connection can be seen as a adjacency matrix:\n",
      "[[0. 1. 1. 1.]\n",
      " [1. 0. 1. 1.]\n",
      " [1. 1. 0. 1.]\n",
      " [1. 1. 1. 0.]]\n",
      "here are the weight of each vertex:\n",
      "[0.6686 0.6686 0.1453 0.1453]\n"
     ]
    }
   ],
   "source": [
    "# we need to know the connection of each vertex in BIG graph\n",
    "# and the weight of each vertex in BIG graph\n",
    "print(\"the connection can be seen as a adjacency matrix:\")\n",
    "print(BIG_adjacent_matrix)\n",
    "\n",
    "print(\"here are the weight of each vertex:\")\n",
    "print(BIG_vertex_weight_matrix.flatten())"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
